#! /usr/bin/make -f

#export DH_VERBOSE = 1
#export DEB_BUILD_OPTIONS = nostrip

export LC_ALL = C.UTF-8

include /usr/share/dpkg/default.mk

ifeq ($(DEB_VENDOR),Ubuntu)
    DEFAULT_NTP_SERVERS = ntp.ubuntu.com
    SUPPORT_URL = http://www.ubuntu.com/support
    CONFFLAGS_DISTRO =
else
    DEFAULT_NTP_SERVERS = 0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
    SUPPORT_URL = https://www.debian.org/support
    CONFFLAGS_DISTRO =
endif

ifneq (, $(filter $(DEB_BUILD_ARCH), riscv64))
    TEST_TIMEOUT_MULTIPLIER = "-t 10"
endif

# fail on missing files and symbols changes on distro builds, but not if we
# build/test upstream master
ifeq ($(TEST_UPSTREAM),)
    DH_MISSING = --fail-missing
    GENSYMBOLS_LEVEL = 4
else
    DH_MISSING = --list-missing
    GENSYMBOLS_LEVEL = 1
endif

ifneq (, $(filter noudeb, $(DEB_BUILD_OPTIONS)))
export DEB_BUILD_PROFILES += noudeb
endif

CONFFLAGS = \
	-Db_lto=true \
	-Db_pie=true \
	-Drootlibdir=/lib/$(DEB_HOST_MULTIARCH) \
	-Dsplit-usr=true \
	-Dquotaon-path=/sbin/quotaon \
	-Dquotacheck-path=/sbin/quotacheck \
	-Dkmod-path=/bin/kmod \
	-Dkexec-path=/sbin/kexec \
	-Dsulogin-path=/sbin/sulogin \
	-Dmount-path=/bin/mount \
	-Dumount-path=/bin/umount \
	-Dloadkeys-path=/bin/loadkeys \
	-Dsetfont-path=/bin/setfont \
	-Dnologin-path=/usr/sbin/nologin \
	-Dtelinit-path=/lib/sysvinit/telinit \
	-Dsysvinit-path=/etc/init.d \
	-Dsysvrcnd-path=/etc \
	-Ddebug-shell=/bin/bash \
	-Dzshcompletiondir=/usr/share/zsh/vendor-completions \
	-Ddbuspolicydir=/usr/share/dbus-1/system.d/ \
	-Dsupport-url=$(SUPPORT_URL) \
	-Ddefault-kill-user-processes=false \
	-Dpamconfdir=no \
	-Drpmmacrosdir=no \
	-Dqrencode=false \
	-Dvconsole=false \
	-Dfirstboot=false \
	-Dxkbcommon=false \
	-Dportabled=false \
	-Dwheel-group=false \
	-Dntp-servers="$(DEFAULT_NTP_SERVERS)" \
	-Ddns-servers='' \
	-Dlink-udev-shared=false \
	-Dsystem-uid-max=999 \
	-Dsystem-gid-max=999 \
	-Dnobody-user=nobody \
	-Dnobody-group=nogroup \
	-Dbump-proc-sys-fs-nr-open=false \
	-Ddev-kvm-mode=0660 \
	-Dgroup-render-mode=0660

# resolved's DNSSEC support is still not mature enough, don't enable it by
# default on stable Debian or any Ubuntu releases
CONFFLAGS += $(shell grep -qE 'stretch|ubuntu' /etc/os-release && echo -Ddefault-dnssec=no)

CONFFLAGS_deb = \
	-Dselinux=true \
	-Dhwdb=true \
	-Dsysusers=true \
	-Dinstall-tests=true \
	-Defi=true \
	-Dnss-myhostname=true \
	-Dnss-mymachines=true \
	-Dnss-resolve=true \
	-Dnss-systemd=true \
	-Dresolve=true \
	-Dlink-systemctl-shared=false

ifeq (, $(filter stage1, $(DEB_BUILD_PROFILES)))
CONFFLAGS_deb += \
	-Daudit=true \
	-Dlibcryptsetup=true \
	-Dcoredump=true \
	-Delfutils=true \
	-Dapparmor=true \
	-Dlibidn=true \
	-Dlibiptc=true \
	-Dlibcurl=true \
	-Dimportd=true \
	-Dmicrohttpd=true \
	-Dgnutls=true
else
CONFFLAGS_deb += \
	-Daudit=false \
	-Dlibcryptsetup=false \
	-Dcoredump=false \
	-Delfutils=false \
	-Dapparmor=false \
	-Dlibidn=false \
	-Dlibiptc=false \
	-Dlibcurl=false \
	-Dimportd=false \
	-Dmicrohttpd=false \
	-Dgnutls=false
endif

CONFFLAGS_udeb = \
	-Dlibcryptsetup=false \
	-Dcoredump=false \
	-Delfutils=false \
	-Dpam=false \
	-Daudit=false \
	-Dselinux=false\
	-Dapparmor=false \
	-Dlibidn=false \
	-Dlibiptc=false \
	-Dsmack=false \
	-Dima=false \
	-Dbinfmt=false \
	-Dquotacheck=false \
	-Dtmpfiles=false \
	-Drandomseed=false \
	-Dbacklight=false \
	-Dlogind=false \
	-Dmachined=false \
	-Dlibcurl=false \
	-Dimportd=false \
	-Dmicrohttpd=false \
	-Dgnutls=false \
	-Dhostnamed=false \
	-Dtimedated=false \
	-Dnetworkd=false \
	-Dtimesyncd=false \
	-Dlocaled=false \
	-Dnss-myhostname=false \
	-Dnss-mymachines=false \
	-Dnss-resolve=false \
	-Dnss-systemd=false \
	-Dresolve=false \
	-Dpolkit=false \
	-Dacl=false \
	-Dgcrypt=false \
	-Drfkill=false \
	-Dhwdb=false \
	-Dman=false \
	-Defi=false \
	-Dseccomp=false \
	-Dsysusers=false

override_dh_auto_configure:
	dh_auto_configure --builddirectory=build-deb \
		-- $(CONFFLAGS) $(CONFFLAGS_DISTRO) $(CONFFLAGS_deb)
ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
	dh_auto_configure --builddirectory=build-udeb \
		-- $(CONFFLAGS) $(CONFFLAGS_DISTRO) $(CONFFLAGS_udeb)
endif

override_dh_auto_build:
	dh_auto_build --builddirectory=build-deb
ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
	dh_auto_build --builddirectory=build-udeb
endif
	# generate POT file for translators
	ninja -C build-deb/ systemd-pot

override_dh_auto_install:
	dh_auto_install --builddirectory=build-deb \
		--destdir=debian/install/deb
ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
	dh_auto_install --builddirectory=build-udeb \
		--destdir=debian/install/udeb
endif
	# fix paths in manpages; manually check the remaining /usr occurrences
	# occasionally, with filtering out paths which are known to be in /usr:
	# grep -r /usr debian/install/deb/usr/share/man/|egrep -v '/usr/local|os.*release|factory|zoneinfo|tmpfiles|kernel|foo|machines|sysctl|dbus|include|binfmt'
	find debian/install/deb/usr/share/man/ -type f | xargs sed -ri 's_/usr(/lib/systemd/system|/lib/systemd/network|/lib/udev|/lib[^/]|/lib/[^a-z])_\1_g'

override_dh_auto_clean:
ifneq (, $(TEST_UPSTREAM))
	debian/extra/checkout-upstream
endif
	dh_auto_clean --builddirectory=build-deb
ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
	dh_auto_clean --builddirectory=build-udeb
endif
	rm -rf debian/install/ debian/shlibs.local
	# remove Python byte code files
	rm -rf tools/__pycache__/
	rm -f po/systemd.pot

override_dh_install:
	# remove unnecessary / unused files
	rm -f debian/install/*/usr/share/doc/systemd/LICENSE.*
	rm -f debian/install/*/var/log/README
	rm -f debian/install/*/etc/init.d/README
	rm -f debian/install/*/usr/lib/sysctl.d/50-default.conf
	rm -f debian/install/*/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
	rmdir -p --ignore-fail-on-non-empty debian/install/*/etc/X11/xinit/xinitrc.d/
	rm -f debian/install/*/lib/systemd/system/halt-local.service
	# remove files related to factory-reset feature
	find debian/install/ \( -name 'systemd-update-done*' -o \
		-name systemd-journal-catalog-update.service -o \
		-name systemd-udev-hwdb-update.service -o \
		-name ldconfig.service -o \
		-name etc.conf \) -delete
	rm -rf debian/install/*/usr/share/factory/
	# remove symlinks enabling default-on services
	rm -rf debian/install/*/etc/systemd/system/*.target.wants/
	# remove aliases
	find debian/install/*/etc/systemd/system/ -type l -delete
	# replace upstream sysusers.d/basic.conf with proper users for Debian
	debian/extra/make-sysusers-basic > debian/install/deb/usr/lib/sysusers.d/basic.conf
	# remove resolvconf compat symlink
	rm -f debian/install/*/sbin/resolvconf
ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
	dh_install -pudev-udeb -plibudev1-udeb --sourcedir=debian/install/udeb
endif

	dh_install --remaining-packages --sourcedir=debian/install/deb

	# we don't want /tmp to be a tmpfs by default
	mv debian/systemd/lib/systemd/system/tmp.mount debian/systemd/usr/share/systemd/
	printf '\n[Install]\nWantedBy=local-fs.target\n' >> debian/systemd/usr/share/systemd/tmp.mount
	rm debian/systemd/lib/systemd/system/local-fs.target.wants/tmp.mount

	# files shipped by cryptsetup
ifeq (, $(filter stage1, $(DEB_BUILD_PROFILES)))
	rm debian/systemd/usr/share/man/man5/crypttab.5
endif

	# files shipped by systemd
	rm debian/udev/lib/udev/rules.d/70-uaccess.rules
	rm debian/udev/lib/udev/rules.d/73-seat-late.rules
	rm debian/udev/lib/udev/rules.d/71-seat.rules
	rm debian/udev/lib/udev/rules.d/99-systemd.rules

	# remove duplicate files shipped by systemd-*/udev
	echo "Removing duplicate files in systemd package:"
	set -e; for pkg in $(shell dh_listpackages -Nudev-udeb -Nlibudev1-udeb -Nsystemd); do \
		echo "... from $$pkg..."; \
		(cd debian/$$pkg; find -type f -o -type l) | (cd debian/systemd; xargs rm -f --verbose); \
		(cd debian/$$pkg; find -mindepth 1 -type d | sort -r) | (cd debian/systemd; xargs rmdir --ignore-fail-on-non-empty --verbose || true); \
	done

	# Ubuntu specific files
ifeq ($(DEB_VENDOR),Ubuntu)
	install -D --mode=644 debian/extra/udev.py debian/udev/usr/share/apport/package-hooks/udev.py
	install -D --mode=644 debian/extra/systemd.py debian/systemd/usr/share/apport/package-hooks/systemd.py
	install --mode=644 debian/extra/rules-ubuntu/*.rules debian/udev/lib/udev/rules.d/
	cp -a debian/extra/units-ubuntu/* debian/systemd/lib/systemd/system/
	install --mode=755 debian/extra/set-cpufreq debian/systemd/lib/systemd/
endif

override_dh_missing:
	dh_missing --sourcedir debian/install/deb $(DH_MISSING)

override_dh_installinit:
	dh_installinit --no-start

PROJECT_VERSION ?= $(shell awk '/(PROJECT|PACKAGE)_VERSION/ {print $$3}' build-deb/config.h | tr -d \")

# The SysV compat tools (which are symlinks to systemctl) are
# quasi-essential, so add their dependencies to Pre-Depends
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=753589
override_dh_shlibdeps:
	dh_shlibdeps -psystemd -- -dPre-Depends \
		-edebian/systemd/bin/systemctl \
		-dDepends
	dh_shlibdeps --remaining-packages -Lsystemd

override_dh_makeshlibs:
	sed 's/SHARED_LIB_VERSION/$(PROJECT_VERSION)/' debian/shlibs.local.in > debian/shlibs.local
	dh_makeshlibs -plibudev1 --add-udeb=libudev1-udeb -- -c$(GENSYMBOLS_LEVEL)
	dh_makeshlibs -psystemd -Xlibsystemd-shared -- -c$(GENSYMBOLS_LEVEL)
	dh_makeshlibs --remaining-packages -- -c$(GENSYMBOLS_LEVEL)

override_dh_auto_test:
ifeq (, $(filter nocheck, $(DEB_BUILD_OPTIONS)))
	echo "01234567890123456789012345678901" > build-deb/machine-id
	# some tests hang under fakeroot, so disable fakeroot
	env -u LD_PRELOAD SYSTEMD_MACHINE_ID_PATH=$(CURDIR)/build-deb/machine-id meson test -C build-deb $(TEST_TIMEOUT_MULTIPLIER) || ( \
		cat build-deb/meson-logs/testlog.txt; \
		exit 1)
endif

%:
	dh $@ --without autoreconf,systemd --buildsystem=meson
